/*
 * Copyright @ 苏州瑞云信息技术有限公司 All rights reserved.
 */
package cn.com.recloud.bbs.service.impl;

import cn.com.recloud.bbs.dao.ArticleTypeDao;
import cn.com.recloud.bbs.entity.bbs_article_type;
import cn.com.recloud.bbs.entity.bbs_my_article_type;
import cn.com.recloud.bbs.dao.MyArticleTypeDao;
import cn.com.recloud.bbs.service.MyArticleTypeService;
import cn.com.recloud.bbs.util.UserUtil;
import cn.com.recloud.bbs.vo.AppArticleTypeVO;
import cn.com.recloud.one.spring.service.impl.BaseServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.stream.Collectors;

/**
 * @author kim dong
 * @date 2020-06-08
 */
@Service
public class MyArticleTypeServiceImpl extends BaseServiceImpl<MyArticleTypeDao, bbs_my_article_type> implements MyArticleTypeService {
    @Autowired
    private ArticleTypeDao typeDao;
    @Autowired
    private MyArticleTypeDao myArticleTypeDao;
    @Autowired
    private UserUtil userUtil;

    @Override
    /**
     * 查询分类及编辑分类
     */
    public Map selectAllType() {
        Map map = new HashMap<>();
        String userId = userUtil.getUserId();
        //默认分类
        List<bbs_article_type> articleTypes = typeDao.selectList(new QueryWrapper<bbs_article_type>().lambda()
                .eq(bbs_article_type::getStatecode, "0")
                .eq(bbs_article_type::getIs_sys, true)
                .orderByAsc(bbs_article_type::getSeq));
        List<AppArticleTypeVO> defaultList = getArticleTypeVO(articleTypes);
        map.put("defaultList", defaultList);

        //查询用户是否有自己的分类
        List<bbs_my_article_type> myTypes = super.list(new QueryWrapper<bbs_my_article_type>().lambda().eq(bbs_my_article_type::getBbs_contactid, userId));
        if (myTypes.size() >= 1) {
            //我的分类
            List<AppArticleTypeVO> my_types= new ArrayList<>();
            for (bbs_my_article_type type:myTypes){
                AppArticleTypeVO vo = new AppArticleTypeVO();
                vo.setTypeId(type.getBbs_article_typeid());
                vo.setName(type.getBbs_article_typeidname());
                vo.setSeq(type.getSeq());
                vo.setSystem(false);
                my_types.add(vo);
            }
            map.put("myList", my_types);
            //更多分类
            List<String> ids = new ArrayList<>();
            for (bbs_my_article_type type:myTypes){
                ids.add(type.getBbs_article_typeid());
            }
            List<bbs_article_type> moreList = typeDao.selectList(new QueryWrapper<bbs_article_type>().lambda()
                    .eq(bbs_article_type::getStatecode, "0")
                    .eq(bbs_article_type::getIs_sys, false));
            moreList=moreList.stream().filter(type-> !ids.contains(type.getBbs_article_typeid())).collect(Collectors.toList());
            map.put("moreList", getArticleTypeVO(moreList));
        } else {
            //自己的分类
            map.put("myList", new ArrayList<>());
            //更多分类
            List<bbs_article_type> article_types = typeDao.selectList(new QueryWrapper<bbs_article_type>().lambda()
                    .eq(bbs_article_type::getStatecode, "0")
                    .eq(bbs_article_type::getIs_sys, false));
            List<AppArticleTypeVO> articleType = getArticleTypeVO(article_types);
            map.put("moreList", articleType);

        }
        return map;
    }

    /**
     * 保存分类编辑
     * @param type
     * @return
     */
    @Override
    public boolean saveListType(List<Map> type) {
        String userId = userUtil.getUserId();
        myArticleTypeDao.delete(new QueryWrapper<bbs_my_article_type>().lambda().eq(bbs_my_article_type::getBbs_contactid, userId));
        List<bbs_my_article_type> list = new ArrayList();
        List<bbs_article_type> articleTypes = typeDao.selectList(new QueryWrapper<bbs_article_type>().lambda()
        .eq(bbs_article_type::getIs_sys,false)
        .eq(bbs_article_type::getStatecode, "0"));
        for (Map map : type) {
            String id = (String) map.get("id");
            int seq = (int) map.get("seq");
            for (bbs_article_type t : articleTypes) {
                if (t.getBbs_article_typeid().equals(id)) {
                    bbs_my_article_type articleType = new bbs_my_article_type();
                    articleType.setBbs_article_typeid(t.getBbs_article_typeid());
                    articleType.setBbs_article_typeidname(t.getName());
                    articleType.setSeq(seq);
                    articleType.setBbs_contactid(userId);
                    articleType.setCreatedby(userId);
                    articleType.setCreatedbyname(userUtil.getUserName());
                    list.add(articleType);
                }
            }
        }
        return super.saveBatch(list);
    }

    /**
     * 工具方法
     * @param articleTypes
     * @return
     */
    List<AppArticleTypeVO> getArticleTypeVO(List<bbs_article_type> articleTypes){
        List<AppArticleTypeVO> defaultList = new ArrayList<>();
        for (bbs_article_type type:articleTypes){
            AppArticleTypeVO typeVO = new AppArticleTypeVO();
            typeVO.setTypeId(type.getBbs_article_typeid());
            typeVO.setSeq(type.getSeq());
            typeVO.setName(type.getName());
            typeVO.setName(type.getName());
            defaultList.add(typeVO);
        }
        return defaultList;
    }
}
